home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / source / tf_sourc / supervga.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1993-06-16  |  3.1 KB  |  167 lines

  1. UNIT SuperVGA;   { by »The Faker« in 1993 }
  2.  
  3. INTERFACE
  4. CONST
  5.      NoVGA=0;
  6.      VGA=1;
  7.      Tseng=2;
  8.      Trident=3;
  9.      ATI=4;
  10.      Paradise=5;
  11. VAR
  12.    Card:Byte;
  13.    ATI_Ext:Word;
  14.  
  15. PROCEDURE SelectBank(Nr:Byte);
  16.  
  17. PROCEDURE GrafikKarte;
  18.  
  19. PROCEDURE SwitchMode;
  20.  
  21. IMPLEMENTATION
  22.  
  23. PROCEDURE SelectBank(Nr:Byte);
  24. BEGIN
  25.      IF Card=Tseng THEN
  26.         Port[$3CD]:=(Nr AND 7)+(Port[$3CD] AND $F8)
  27.      ELSE
  28.      IF Card=Trident THEN
  29.         PortW[$3C4]:=$E+(Nr XOR 2) SHL 8
  30.      ELSE
  31.      IF Card=ATI THEN
  32.      BEGIN
  33.           ASM
  34.              mov bl,nr
  35.              mov dx,ati_ext
  36.              mov al,$b2
  37.              out dx,al
  38.              inc dx
  39.              in al,dx
  40.              mov ah,al
  41.              and ah,$f0
  42.              shl bl,1
  43.              or ah,bl
  44.              mov al,$b2
  45.              dec dx
  46.              out dx,ax
  47.           END;
  48.      END
  49.      ELSE
  50.      IF Card=Paradise THEN
  51.      BEGIN
  52.           Port[$3CE]:=9;
  53.           Port[$3CF]:=Nr SHL 4;
  54.           Port[$3CE]:=$A;
  55.           Port[$3CF]:=Nr SHL 4;
  56.      END;
  57. END;
  58.  
  59. FUNCTION IsItTseng:Boolean;
  60. VAR
  61.    Dummy,OldValue,NewValue,Value:Byte;
  62. BEGIN
  63.      Port[$3BF]:=3;
  64.      IF Port[$3CC] AND 1=1 THEN
  65.         Port[$3D8]:=$A0
  66.      ELSE Port[$3B8]:=$A0;
  67.      Dummy:=Port[$3DA];
  68.      Port[$3C0]:=$16;
  69.      OldValue:=Port[$3C1];
  70.      Dummy:=Port[$3DA];
  71.      Port[$3C0]:=$16;
  72.      NewValue:=OldValue XOR $10;
  73.      Port[$3C0]:=NewValue;
  74.      Dummy:=Port[$3DA];
  75.      Port[$3C0]:=$16;
  76.      Value:=Port[$3C1];
  77.      Dummy:=Port[$3DA];
  78.      Port[$3C0]:=$16;
  79.      Port[$3C0]:=OldValue;
  80.      IsItTseng:=Value=NewValue;
  81. END;
  82.  
  83. FUNCTION IsItTrident:Boolean;
  84. VAR
  85.    Dummy,OldValue,NewValue,Value:Byte;
  86. BEGIN
  87.      Port[$3C4]:=$E;
  88.      OldValue:=Port[$3C5];
  89.      Port[$3C5]:=0;
  90.      Value:=Port[$3C5] AND $F;
  91.      Port[$3C5]:=OldValue;
  92.      IsItTrident:=Value=2;
  93. END;
  94.  
  95. FUNCTION IsItATI:Boolean;
  96. CONST
  97.      ID:ARRAY[1..9] OF Char='761295520';
  98. VAR
  99.    I:Byte;
  100. BEGIN
  101.      IsItATI:=FALSE;
  102.      FOR I:=1 TO 9 DO
  103.          IF Ord(ID[I])<>Mem[$C000:$30+I] THEN
  104.             Exit;
  105.      ATI_Ext:=MemW[$C000:$10];
  106.      IsItATI:=TRUE;
  107. END;
  108.  
  109. FUNCTION IsItParadise:Boolean;
  110. BEGIN
  111.      IsItParadise:=MemL[$C000:$7D]=$3D414756;
  112. END;
  113.  
  114. PROCEDURE GrafikKarte;
  115. VAR
  116.    IsVGA:Byte;
  117. BEGIN
  118.      ASM
  119.         mov ax,$1a00
  120.         int $10
  121.         mov isvga,al
  122.      END;
  123.      IF IsVGA<>$1A THEN
  124.         Card:=NoVGA
  125.      ELSE
  126.      IF IsItTrident THEN
  127.         Card:=Trident
  128.      ELSE
  129.      IF IsItTseng THEN
  130.         Card:=Tseng
  131.      ELSE
  132.      IF IsItATI THEN
  133.         Card:=ATI
  134.      ELSE
  135.      IF IsItParadise THEN
  136.         Card:=Paradise
  137.      ELSE Card:=VGA;
  138.      ASM
  139.         mov ax,3
  140.         int $10
  141.      END;
  142. END;
  143.  
  144. PROCEDURE SwitchMode;
  145. VAR
  146.    ModeControl:Byte;
  147. BEGIN
  148.      IF Card=Tseng THEN
  149.         ModeControl:=$2E
  150.      ELSE
  151.      IF Card=Trident THEN
  152.         ModeControl:=$5D
  153.      ELSE
  154.      IF Card=ATI THEN
  155.         ModeControl:=$62
  156.      ELSE Exit;
  157.      ASM
  158.         mov al,modecontrol
  159.         xor ah,ah
  160.         int $10
  161.      END;
  162. END;
  163.  
  164. BEGIN
  165.      GrafikKarte;
  166. END.
  167.